var
區域變數let
區域變數{ }
且同一範圍內,不允許重複宣告同一變數var
宣告過的變數,不能再使用 let
宣告一次let
宣告變數後,才能開始使用 ( 變數特性與 C# / Java 非常類似 )let
,沒必要別使用 var
。const
區域變數let
完全相同 ( block scope { }
)常數宣告,在JS,常數宣告的值不可再被改變。 所以會出現錯誤訊息 TypeError: Assignment to constant variable.
因為使用 const
, let
來宣告的變數名稱不可以再被重新宣告(reassign),重複宣告會出錯: SyntaxError: Identifier 'myEmail' has already been declared
。
若是用 var
宣告,則 var student ="xx"
的值會被後面宣告 var student = "kk";
的值覆寫掉。
//1 常數宣告
const PI = 3.14;
PI = 3333333; //TypeError: Assignment to constant variable.
//2
const myEmail = "ak@xxx.com";
const myEmail = "ak@xxxdx.com.tw"; //SyntaxError: Identifier 'myEmail' has already been declared
var student = "ak";
var student = "kk";
ntd
, 因此在瀏覽器中 可以印出 ntd
(window.ntd
已處在全域環境中,window
可以省略) 就等於 30000。在文字編輯器要印出
window
物件,會顯示window is not defined
的錯誤, 在server 端執行環境 - node.js 的全域物件是global
,所以要寫成global.ntd
,在文字編輯器中就可以執行。
//3
let usd = 20000;
ntd = 30000;
console.log("ntd: " + window.ntd); //"ntd: 30000"
global.console.log("ntd: " + global.ntd); //global is not defined
console.log(ntd);
Unexpected token 'const'
的錯誤,可參考查詢 JavaScript Reserved Words。//4
let const = const; // Unexpected token 'const'
//5
const 112315664523 = 123;
//SyntaxError: const 112315664523 = 123;const 112315664523 = 123;
const a = {};
a.name = "kk";
let
宣告 i
(function(){
for( let i = 0; i < 10; i++ ){
setTimeout(function(){ console.log(i); }, 100 * i);
}
})(); // 0 1 2 3 4 5 6 7 8 9 會產生10個 instance,每一次迴圈會產生一個獨立的 instance
var
宣告 i
(function(){
for( var i = 0; i < 10; i++ ){
setTimeout(function(){ console.log(i); }, 100 * i);
// i 會透過 scope chain 往上找,loop 先執行, setTimeout 才會開始跑
}
})(); // 10個10
i
並沒有透過參數傳進 call back function 之中,所以在此 function 之中,並沒有宣告 i
, 因此 console.log(i);
會透過 scope chain 會去找離它最近的上一層範圍的同名變數,但因為 loop 先執行, setTimeout 才會開始跑。
var
要像 let
一樣會印出 0 - 9
的正確寫法
(function(){
for( var i = 0; i < 10; i++ ){
setTimeout(function(i){ console.log(i); }, 100 * i, i);
}
})();
/*
0
1
2
3
4
5
6
7
8
9
*/
在每次的迴圈中都會呼叫setTimeout
函式,i
透過參數將它的記憶體位址傳進setTimeout
函式之中,當指定的時間到了可執行 function
的時候(每次迴圈的延遲時間為 100 * i
毫秒),丟到 function
的參數存起來作為變數 i
, 每一次迴圈會產生一個獨立的實體(instance),總共會產生10個實體(instance)。